package robot

import (
	"context"
	"sale-admin/config/mysql"
	"sale-admin/internal/app/grpc/client"
	"sale-admin/internal/app/grpc/protoc/system_admin"
	"sale-admin/internal/models"

	"192.168.1.75/go-pkg/errorx"
	"192.168.1.75/go-pkg/helper"
	"192.168.1.75/go-pkg/logx"
)

// 机器商品角标
type RobotCornerLabel struct{}

// All 所有角标
func (RobotCornerLabel) All(ctx context.Context,
) (
	list []models.MaGoodsCornerLabel,
	count int64,
	err error,
) {
	db := mysql.NewDB()
	tx := db.Model(&models.MaGoodsCornerLabel{})

	tx.Count(&count)

	// 赋空值
	list = []models.MaGoodsCornerLabel{}
	tx.Find(&list)

	return
}

// List 角标列表
func (RobotCornerLabel) List(ctx context.Context,
	Page,
	Limit int,
	Type int,
	Name string,
	Status int,
) (
	list []models.MaGoodsCornerLabel,
	count int64,
	err error,
) {
	db := mysql.NewDB()
	tx := db.Model(&models.MaGoodsCornerLabel{})

	// 1. 检索活动名称
	if Name != "" {
		tx.Where("name like ?", "%"+Name+"%")
	}
	// 2. 检索活动类型
	if Type != 0 {
		tx.Where("type = ?", Type)
	}

	// 2. 检索活动状态
	if Status != 0 {
		tx.Where("status = ?", Status)
	}

	tx.Count(&count)

	// 赋空值
	list = []models.MaGoodsCornerLabel{}
	helper.Gorm{}.Paginate(tx, int(Page), int(Limit)).Find(&list)

	return
}

// 添加角标 ---- 正在使用的角标，不允许删除
func (RobotCornerLabel) Del(
	ctx context.Context,
	ID string,
) (
	err error,
) {
	db := mysql.NewDB()
	db.Model(&models.MaGoodsCornerLabel{}).
		Where("id = ? and deleted_at = 0", ID).
		Delete(&models.MaGoodsCornerLabel{})
	return
}

// 添加机器角标
func (RobotCornerLabel) Add(
	ctx context.Context,
	id,
	image string,
	Name string,
	Position int,
	Type int,
	StartTime int,
	EndTime int,
) (
	err error,
) {
	db := mysql.NewDB()
	if id != "" {
		// 编辑
		var data models.MaGoodsCornerLabel
		// 查询信息
		db.Model(&models.MaGoodsCornerLabel{}).Where("id = ?", id).Take(&data)
		data.Name = Name
		data.Position = Position
		data.Type = Type
		data.StartTime = StartTime
		data.EndTime = StartTime
		// 属于重新上传图片的情况，需要重新校验
		if image != "" && image != data.Image {
			// 2.图片提交时，需确认文件
			// 初始化
			SystemAdminClient, clientErr := client.GetSystemAdminClient()
			if clientErr != nil {
				err = clientErr
				return
			}
			// 开始确认文件
			var req system_admin.ConfirmFileReq
			req.FileUrl = image
			res, err1 := SystemAdminClient.ConfirmFile(context.Background(), &req)
			if err1 != nil && res.Code != 0 {
				logx.Error(context.Background(), "activity confirm file error", logx.Any("res", res), logx.Any("err", err1.Error()))
				return
			}
			data.Image = res.FileUrl
		}
		// 执行更新
		err = db.Model(&models.MaGoodsCornerLabel{}).Where("id = ?", id).Updates(&data).Error
		if err != nil {
			err = errorx.New("更新失败", -1)
			return
		}
	} else {
		// 新增
		var data models.MaGoodsCornerLabel
		data.Name = Name
		data.Position = Position
		data.Type = Type
		// data.Status = Status
		data.StartTime = StartTime
		data.EndTime = EndTime
		if image != "" {
			// 2.图片提交时，需确认文件
			// 初始化
			SystemAdminClient, clientErr := client.GetSystemAdminClient()
			if clientErr != nil {
				err = clientErr
				return
			}
			// 开始确认文件
			var req system_admin.ConfirmFileReq
			req.FileUrl = image
			res, err1 := SystemAdminClient.ConfirmFile(context.Background(), &req)
			if err1 != nil && res.Code != 0 {
				logx.Error(context.Background(), "activity confirm file error", logx.Any("res", res), logx.Any("err", err1.Error()))
				return
			}
			data.Image = res.FileUrl
		}
		// 执行写入
		err = db.Model(&models.MaGoodsCornerLabel{}).Create(&data).Error
		if err != nil {
			err = errorx.New("新增失败", -1)
			return
		}
	}

	return
}

/*
// 获取机器角标
func (RobotCornerLabel) GetBackground(
	ctx context.Context,
	Position int,
) (
	image string,
	err error,
) {
	// 只返回有默认的图片，没有则随便选择一张
	db := mysql.NewDB()
	var info models.MaGoodsCornerLabel
	tx := db.Model(&models.MaGoodsCornerLabel{})
	tx.Where("default_use = ?", 1)
	// 有传位置
	if Position > 0 {
		tx.Where("position = ?", Position)
	} else {
		tx.Where("position = ?", 1)
	}
	tx.Take(&info)
	if info.Image != "" {
		image = info.Image
	}
	return
}
*/
